/*
 * One example for NOI CSP-J Lesson 10:
 * <https://courses.fmsoft.cn/plzs/noijunior-csp-exercises-lower.html>
 *
 * Author: Vincent Wei
 *  - <https://github.com/VincentWei>
 *  - <https://gitee.com/vincentwei7>
 *
 * Copyright (C) 2025 FMSoft <https://www.fmsoft.cn>.
 * License: GPLv3
 */
#include <vector>
#include <utility>
#include <algorithm>
#include <iostream>
#include <cassert>

using namespace std;

using ull = unsigned long long;
using item_t = pair<ull, ull>;

// 用于对物品进行排序的回调函数。
bool compare(item_t& a, item_t& b)
{
    // 注意务必使用双精度浮点数计算单位重量的价值。
    double a1 = (1.0 * a.first) / a.second;
    double b1 = (1.0 * b.first) / b.second;
    return a1 > b1;
}

// 贪婪原则：每次选择单位重量价值最高的物品放入背包中。
double fractional_knapsack(vector<ull>& values, vector<ull>& weights,
        ull capacity)
{
    size_t n = values.size();

    // 将价值和重量构成新的数据类型 item_t，以方便后续处理。
    vector<item_t> items(n);

    for (size_t i = 0; i < n; i++) {
        items[i].first = values[i];
        items[i].second = weights[i];
    }

    /* 亦可使用二维数组：
    vector<vector<ull>> items(n, vector<ull>(2));
    for (size_t i = 0; i < n; i++) {
        items[i][0] = values[i];
        items[i][1] = weights[i];
    } */

    // 基于单位重量的价值对物品进行排序。
    sort(items.begin(), items.end(), compare);

    double res = 0.0;

    // 状态定义：剩余的容量。
    ull left_capacity = capacity;

    // 从单位重量价值最高的物品开始处理。
    for (size_t i = 0; i < n; i++) {

        // 是否可以放下整个物品？
        if (items[i].second <= left_capacity) {
            // 将该物品放入背包。
            res += items[i].first;

            // 修改剩余容量。
            left_capacity -= items[i].second;
        }
        else {
            // 如果不行，则分解物品。
            // 但此时也意味着背包已满。
            res += (1.0 * items[i].first / items[i].second) * left_capacity;
            break;
        }
    }

    return res;
}

int main()
{
    vector<ull> values  = {60, 100, 120};
    vector<ull> weights = {10, 20, 30};

    assert(fractional_knapsack(values, weights, 50) == 240);

    ull capacity;
    cin >> capacity;
    cout << fractional_knapsack(values, weights, capacity) << endl;

    return 0;
}

